package com.shrct.businessprocess.product;

import com.shrct.businessprocess.organization.RCEnterprise;
import com.shrct.businessprocess.product.RCFullServiceProductEntry;
import com.shrct.businessprocess.product.RCIdentifiablePhysicalProductEntryStatus;
import com.shrct.businessprocess.product.RCIdentifiableProductEntry;
import com.shrct.businessprocess.product.RCLogicProduct;
import com.shrct.businessprocess.product.RCProductEvent;
import com.shrct.businessprocess.product.RCProductMetaType;
import com.shrct.businessprocess.product.impl.RCIdentifiablePhysicalProductEntryImpl;
import com.shrct.businessprocess.product.proxy.RCIdentifiablePhysicalProductEntryProxy;
import com.shrct.businessprocess.purchase.RCPurchaseOrderItem;
import edu.fudan.mylang.pf.EntityImplementation;
import java.util.Collection;

@EntityImplementation(implementBy = RCIdentifiablePhysicalProductEntryImpl.class)
public interface RCIdentifiablePhysicalProductEntry extends RCIdentifiableProductEntry {
  public abstract RCLogicProduct getLogicProduct();
  
  public abstract RCIdentifiablePhysicalProductEntry setLogicProduct(final RCLogicProduct logicProduct);
  
  public abstract Boolean getIsReplaced();
  
  public abstract RCIdentifiablePhysicalProductEntry setIsReplaced(final Boolean isReplaced);
  
  public abstract Boolean getIsBorrowReplaced();
  
  public abstract RCIdentifiablePhysicalProductEntry setIsBorrowReplaced(final Boolean isBorrowReplaced);
  
  public abstract RCIdentifiablePhysicalProductEntry getParent();
  
  public abstract RCIdentifiablePhysicalProductEntry setParent(final RCIdentifiablePhysicalProductEntry parent);
  
  public abstract Iterable<RCIdentifiablePhysicalProductEntry> allParts();
  
  public abstract Iterable<RCFullServiceProductEntry> getServices();
  
  public abstract Collection<? extends RCProductEvent> getEvents();
  
  public abstract RCProductMetaType getProductMetaType();
  
  public abstract RCIdentifiablePhysicalProductEntryStatus getStatus();
  
  public abstract void start();
  
  public abstract void _inStock(final RCPurchaseOrderItem orderItem);
  
  public abstract void _import();
  
  public abstract void _rmaImport();
  
  public abstract void _deliver(final RCEnterprise enterprise);
  
  public abstract void _cancelInStock();
  
  public abstract void _return();
  
  public abstract void _rmaReplace();
  
  public abstract Boolean isCreated();
  
  public abstract Boolean isInStocking();
  
  public abstract Boolean isDelivered();
  
  public abstract Boolean isImported();
  
  public abstract Boolean isRMAImported();
  
  public abstract Boolean isRMAReplaced();
  
  public abstract RCIdentifiablePhysicalProductEntryProxy toProxy();
}
